class Solution {
public:
    void setZeroes(vector<vector<int> > &matrix) {
        int n=matrix.size();
        if (n==0) return;
        int m=matrix[0].size();
        if (m==0) return;
        int zeroRow=-1;
        for (int i=0;i<n && zeroRow==-1;i++)
            for (int j=0;j<m && zeroRow==-1;j++)
                if (matrix[i][j]==0) zeroRow=i;
        if (zeroRow==-1) return;
        for (int i=zeroRow+1;i<n;i++) {
            bool hasZero=false;
            for (int j=0;j<m;j++)
                if (matrix[i][j]==0) {
                    matrix[zeroRow][j]=0;
                    hasZero=true;
                }
            if (hasZero)
                for (int j=0;j<m;j++) matrix[i][j]=0;
        }
        for (int j=0;j<m;j++)
            if (matrix[zeroRow][j]==0)
                for (int i=0;i<n;i++) matrix[i][j]=0;
        for (int j=0;j<m;j++)
            matrix[zeroRow][j]=0;
    }
};
